import axios, {
  type AxiosInstance,
  type AxiosResponse,
  type InternalAxiosRequestConfig,
} from 'axios';
import Cookie from 'js-cookie';
// 创建 axios 实例
const instance: AxiosInstance = axios.create({
  baseURL: 'http://localhost:5173/api', // 可根据需要修改
  timeout: 100000,
  headers: {
    'Content-Type': 'application/json',
    Accept: 'application/json',
  },
});

// 请求拦截器
instance.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    const token = Cookie.get('mcp-session-id');
    console.log('🚀 ~ token:', token);
    if (token) {
      config.headers['mcp-session-id'] = token;
    }
    return config;
  },
  error => {
    // 请求错误处理
    return Promise.reject(error);
  }
);

// 响应拦截器
instance.interceptors.response.use(
  (response: AxiosResponse) => {
    // 可以统一处理响应数据
    return response.data;
  },
  error => {
    // 错误处理
    if (error.response) {
      // 服务端返回的错误
      switch (error.response.status) {
        case 400:
          console.error(
            '响应错误:',
            error.response.status,
            error.response.data
          );
          alert('请求参数错误');
          break;
        case 401:
          console.error(
            '响应错误:',
            error.response.status,
            error.response.data
          );
          alert('未授权，请登录');
          break;
        case 403:
          console.error(
            '响应错误:',
            error.response.status,
            error.response.data
          );
          alert('禁止访问');
          break;
        case 404:
          console.error(
            '响应错误:',
            error.response.status,
            error.response.data
          );
          alert('请求的资源不存在');
          break;
        case 500:
          console.error(
            '响应错误:',
            error.response.status,
            error.response.data
          );
          alert('服务端错误');
          break;
        default:
          console.error(
            '响应错误:',
            error.response.status,
            error.response.data
          );
          alert(error.response.data?.message || '服务端错误');
      }
    }
    return Promise.reject(error);
  }
);

export { instance as axios };
